Matlab实战|最后通牒游戏
Hello,
这里是行上行下,我是喵君姐姐~
机会是留给有准备的人,对于初次接触编程的人,难免会有抗拒心理。
但是现在心理学博士招生的要求当中,总是写着“熟练使用Matlab/Python/R语言者优先”。
在数据以及分析过程公开化的趋势下,能够熟练使用编程已是大势所趋。
那今天我就详细讲解一下,如何从零基础开始matlab编程?
本文将会简要介绍在Matlab中利用psychtoolbox工具箱进行编程的实例,主要是编程过程及一些需要注意的问题,旨在为喜欢用Matlab的同学提供一个大致的编程思路。
由于能力有限,只能为初学者们提供一个大致的思路,不能保证代码最优化,若有错误,还请多多包涵、指正~
所用的Matlab是2016a版,win7环境,工具箱版本为Psychotoolbox。
其中,Matlab软件包及安装过程,上次已详细讲解,点击蓝字可跳转。
其中,Psychotoolbox可在官网下载或在后台回复”Psychotoolbox“也可下载。
在正式编写实验程序前,强烈建议先用一张白纸简要地写出程序逻辑框架,即:被试信息部分,指导语部分,while循环及if/else判断部分(此处极为重要),以及最后的收尾、保存最终数据阶段。
本例所用实验范式为最后通牒游戏(Ultimatum Game)范式。
最后通牒游戏,被广泛地应用于社会认知及相关领域的心理学实验中,共有两名玩家,分为提议者和接受者。
大致流程为:提议者对待分配资金进行分配,分配方案则交由接受者来决定是否按此分配。若接受者接受此分配方案,则按该方案进行分配;若接受者拒绝此分配方案,则双方均无收益。本实验被试作为接受者。
首先,一个实验,最开始就是要收集被试数据,如下所示,被试信息文件会保存至当前工作目录下。
之后是指导语,如下所示,e:\Gui.png为指导语图片的路径(此处及之后需要展示中文字符串的地方,皆使用图片来展示)。
等待一秒后(防止按键过快),按任意键执行下一句(由于本实验不需要记录反应时,所以此处使用KbWait即可,否则建议换成精度更高的KbCheck)。
多个指导语,可以设置多个图片,按图示第三句开始重复即可。
下图为练习实验所用变量,正式实验对其再次赋值即可。
这里应对实验中的试次数、反应所需按键、其它循环所需变量进行赋值。t为试次数,g为总金额,b为随机生成矩阵的前一半(用于随机呈现刺激)。
下图为while循环,逻辑较为简单。
将注视点程序写在while判断条件下(可通过调用.m文件来简化代码,即写成脚本再调用),为了方便起见,此处将所有的条件(如:A提议者分配方案5:5,B提议者分配方案3:7等)做成图片再进行显示,右图的if只显示了A提议者的5:5方案时拒绝情况,接受写在else后,后三句是将此情况的数据保存至相应文件(每个提议者的每种方案的每种接受/拒绝情况都要写)。
下图为决策部分,将决策结果保存至相应文件中。此外,为了检测按键,应加入如下语句:[~,keyCode]=KbPressWait(-3);pressCode=find(keyCode);-3代表检测全键盘。
while循环的判断条件(t=t+1)写在 if c==0 …….end后。
下图为while循环结束后,结束实验前的准备,包括:写入游戏最终金额等(需要什么写什么)。
此时,一个被试的数据就保存好了,第二个被试也可以用相同的程序,文件中会另起一行重新记录。
为了方便起见,将练习实验的txt文件中的数据保存至Execl文件的sheet1中;将正式实验的txt文件中的数据保存至Execl文件的sheet2中。
练习实验的结果保存处使用textread命令,这里仅仅举个例子,textscan命令更简便。
正式实验的结果保存处使用textscan命令,以便进行大量数据的读取。
今天,详细介绍了如何从零开始进行Matlab编程。以简单的最后通牒游戏为例,希望能够做到一个抛砖引玉的作用,让你开启编程之旅。
万事开头难,可能你对于代码讲解也不是太懂。但是能够尝试一下,跑一下程序,也算是一个良好的开端。
之后,可以多看看Matlab相关书籍及教程,慢慢开始学习,总有一天你也可以的!
此外,我也整理了一份最后通牒游戏全部代码以及相应的详细教程等。后台回复关键词“最后通牒游戏”,即可获得所述的最后通牒游戏范式代码以及相应教程啦!
感谢你耐心地读到现在,初次编程,还是有很多不足之处,还请多多批评、指正~
分享完毕,希望有所帮助。